
package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.PlanNegocioDao;
import edu.upc.clase.demo.entity.PlanNegocio;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class PlanNegocioDaoImpl extends SimpleJdbcDaoSupport implements PlanNegocioDao {
    
    private static Logger log = LoggerFactory.getLogger(PlanNegocioDaoImpl.class);

    @Autowired
    public PlanNegocioDaoImpl(DataSource dataSource) {
        log.info("Asignando el dataSource");
        setDataSource(dataSource);
    }
    
    @Override
    public Integer insertarPlan(PlanNegocio plannegocio) {

        getJdbcTemplate().update(
                "insert into plan_negocio (titulo, usuario_id_usuario, vision_negocio,"
                + "categoria_id_categoria, propuesta, tiempo, mo_total, mo_margen, mo_roi,"
                + "url_documento, mo_precio, estado_plan, in_estado) "
               +"values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                plannegocio.getTitulo(), plannegocio.getUsuario_id_usuario(), plannegocio.getVision_negocio(),
                plannegocio.getCategoria_id_categoria(), plannegocio.getPropuesta(), plannegocio.getTiempo(),
                plannegocio.getMo_total(), plannegocio.getMo_margen(), plannegocio.getMo_roi(),
                plannegocio.getUrl_documento(), plannegocio.getMo_precio(), plannegocio.getEstado_plan(),
                plannegocio.getIn_estado());
        return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
        
    }
    
    @Override
    public void actualizarPlan(PlanNegocio plannegocio) {

        getJdbcTemplate().update(
                "update plan_negocio set titulo = ?, usuario_id_usuario = ?, vision_negocio = ?,"
                + "categoria_id_categoria = ?, propuesta = ?, tiempo = ?, mo_total = ?, mo_margen = ?, "
                + "mo_roi = ?, url_documento = ?, mo_precio = ?"
               + "where id_plan = ?",  
                plannegocio.getTitulo(), plannegocio.getVision_negocio(),
                plannegocio.getCategoria_id_categoria(), plannegocio.getPropuesta(), plannegocio.getTiempo(),
                plannegocio.getMo_total(), plannegocio.getMo_margen(), plannegocio.getMo_roi(),
                plannegocio.getUrl_documento(), plannegocio.getMo_precio(), plannegocio.getEstado_plan(),
                plannegocio.getIn_estado(), plannegocio.getId_plan() );
       
    }
    
    @Override
    public void eliminarPlan(PlanNegocio plannegocio) {

        getJdbcTemplate().update(
                "delete from plan_negocio where id_plan = ?)",
                plannegocio.getId_plan());
        
    } 
    
        @Override
    public PlanNegocio buscarPlan(Integer id) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select titulo, vision_negocio, tiempo, mo_total, in_estado from plan_negocio where id_plan=?",
                    new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class), id);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
    
    @Override
    public List<PlanNegocio> buscarTodos() {
        return getSimpleJdbcTemplate().query(
                "select titulo, vision_negocio, tiempo, mo_total, in_estado from plan_negocio",
                new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class));
    }    
    
        @Override
    public PlanNegocio buscarPlanTitulo(String titulo, Integer tiempo, double mo_total, double mo_margen, double mo_roi) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select titulo from plan_negocio where titulo=? and tiempo=? and mo_total=? and mo_margen=? and mo_roi=?",
                    new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class),titulo,tiempo,mo_total,mo_margen,mo_roi);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
        
            
         @Override
    public PlanNegocio buscarPlanCategoria(Integer categoria_id_categoria, Integer tiempo, double mo_total, double mo_margen, double mo_roi) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select titulo from plan_negocio where categoria_id_categoria=? and tiempo=? and mo_total=? and mo_margen=? and mo_roi=?",
                    new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class),categoria_id_categoria,tiempo,mo_total,mo_margen,mo_roi);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
         
             @Override
    public PlanNegocio buscarPlanVision(String vision_negocio, Integer tiempo, double mo_total, double mo_margen, double mo_roi) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select titulo from plan_negocio where categoria_id_categoria like ? and tiempo=? and mo_total=? and mo_margen=? and mo_roi=?",
                    new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class),vision_negocio,tiempo,mo_total,mo_margen,mo_roi);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
        
              
    }
             
         @Override
    public void actualizarPlanValidar(PlanNegocio plannegocio) {

        getJdbcTemplate().update(
                "update plan_negocio set estado_plan = ? where id_plan = ?",  
                 plannegocio.getEstado_plan(),plannegocio.getId_plan() );
       
    }
}
